package com.itheima.ydd.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.ydd.common.ResultData;
import com.itheima.ydd.dto.MenuDto;
import com.itheima.ydd.entity.Menu;
import com.itheima.ydd.service.MenuService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author : xyiaao
 * @createDate : 2022/2/26 15:09
 */
@RestController
@RequestMapping("/sys_menu")
public class MenuController {

    @Autowired
    private MenuService menuService;


    /**
     * 权限管理 - 菜单管理
     * 菜单修改
     *
     * @param menu
     * @return
     */
    @PostMapping("/update")
    public ResultData update(@RequestBody Menu menu) {

        menuService.updateById(menu);
        return ResultData.ok("修改成功");
    }


    /**
     * 权限管理 - 菜单管理
     * 菜单删除
     *
     * @param id
     * @return
     */
    @GetMapping("/del")
    public ResultData del(Integer id) {

        menuService.removeIfNoChild(id);
        return ResultData.ok("删除成功");
    }


    /**
     * 权限管理 - 菜单管理
     * 所有菜单
     *
     * @return
     */
    @GetMapping("/allData")
    public ResultData allData() {

        // 先找一级菜单
        LambdaQueryWrapper<Menu> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Menu::getPid, 0);
        List<MenuDto> menuDtoList = menuService.list(queryWrapper).stream().map(menu -> {
            MenuDto menuDto = new MenuDto();
            BeanUtils.copyProperties(menu, menuDto);
            // 递归查找下级菜单
            menuService.childList(menuDto);
            return menuDto;
        }).collect(Collectors.toList());
        return ResultData.ok(menuDtoList);
    }


    /**
     * 权限管理 - 菜单管理
     * 菜单添加
     *
     * @param menu
     * @return
     */
    @PostMapping("/add")
    public ResultData add(@RequestBody Menu menu) {

        menuService.save(menu);
        return ResultData.ok("添加成功");
    }


    /**
     * 权限管理 - 菜单管理
     * 菜单详情
     *
     * @param id
     * @return
     */
    @GetMapping("/rowInfo")
    public ResultData rowInfo(Integer id) {

        return ResultData.ok(menuService.getById(id));
    }

}
